package com.xuelang.pipeline.artifact.domain.resource.repository;

import com.xuelang.pipeline.artifact.client.common.result.PageRecord;
import com.xuelang.pipeline.artifact.client.resource.dto.ArtifactToolQuery;
import com.xuelang.pipeline.artifact.domain.resource.ArtifactTool;

import java.util.List;

/**
 * 制品工具仓库
 *
 * @author liuyuan.ly
 * @since 2024/5/14 9:48
 */
public interface ArtifactToolRepository {
    /**
     * 获取制品工具列表，有过滤条件
     *
     * @param currentPage
     * @param pageSize
     * @param artifactToolQuery
     * @return
     */
    PageRecord<ArtifactTool> pageList(long currentPage, long pageSize, ArtifactToolQuery artifactToolQuery);
    /**
     * 获取制品工具列表，有过滤条件
     *
     * @param artifactToolQuery
     * @return
     */
    List<ArtifactTool> list(ArtifactToolQuery artifactToolQuery);

    /**
     * 新增制品工具
     *
     * @param artifactTool
     * @return
     */
    Boolean save(ArtifactTool artifactTool);

    /**
     * 更新制品工具
     *
     * @param artifactTool
     * @return
     */
    Boolean update(ArtifactTool artifactTool);
    /**
     * 删除制品工具
     *
     * @param artifactToolUuid
     * @return
     */
    Boolean delete(String artifactToolUuid);
    /**
     * 查询制品工具
     *
     * @param artifactToolUuid
     * @return
     */
    ArtifactTool query(String artifactToolUuid);

    /**
     * 同一项目下不能存在相同仓库名称或相同仓库编码
     *
     * @param uuid
     * @param projectCode
     * @param artifactCode
     * @param artifactName
     * @return
     */
    Boolean existsArtifactCodeAndNameByProjectCode(String uuid, String projectCode, String artifactCode, String artifactName);

    /**
     * 根据仓库实例名称获取仓库信息
     *
     * @param repositoryName
     * @return
     */
    ArtifactTool getArtifactToolByInstanceRepositoryName(String repositoryName);
    /**
     * 查询制品工具列表-提供流水线使用
     *
     * @return
     */
    List<ArtifactTool> listArtifactTool();
}
